﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;
using itau.im.dado;
using EnterpriseLibraryWrapper;
using System.Collections;

namespace itau.im.negocio
{
    public class ControleAcessoBS : IControleAcessoBS
    {
        #region Metodos

        public IList<GrupoAcesso> ObterGruposNotificacao()
        {
            IList<GrupoAcesso> listaGrupoAcesso = null;

            try
            {
                IControleAcessoDAO controleAcessoDAO = DaoFactory.getControleAcessoDAO();
                listaGrupoAcesso = controleAcessoDAO.ObterGruposNotificacao();
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }

            return listaGrupoAcesso;
        }

        public IList<GrupoAcesso> ObterGruposDisponiveis()
        {
            IList<GrupoAcesso> listaRetorno = null;

            try
            {
                listaRetorno = new List<GrupoAcesso>();

                GrupoAcesso grupo = new GrupoAcesso();
                grupo.CodigoCurva = 1;
                grupo.CodigoGrupoAcesso = 1;
                grupo.CodigoTipoAcesso = 1;
                grupo.CodigoUsuarioResponsavel = 1;
                grupo.NomeGrupo = "Grupo 1";
                listaRetorno.Add(grupo);

                grupo = new GrupoAcesso();
                grupo.CodigoCurva = 2;
                grupo.CodigoGrupoAcesso = 2;
                grupo.CodigoTipoAcesso = 2;
                grupo.CodigoUsuarioResponsavel = 2;
                grupo.NomeGrupo = "Grupo 2";
                listaRetorno.Add(grupo);

                grupo = new GrupoAcesso();
                grupo.CodigoCurva = 3;
                grupo.CodigoGrupoAcesso = 3;
                grupo.CodigoTipoAcesso = 3;
                grupo.CodigoUsuarioResponsavel = 3;
                grupo.NomeGrupo = "Grupo 3";
                listaRetorno.Add(grupo);

                //IControleAcessoDAO controleAcessoDAO = DaoFactory.getControleAcessoDAO();

                //listaRetorno = controleAcessoDAO.ObterGruposDisponiveis();

                return listaRetorno;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaRetorno = null;
            }

            return new List<GrupoAcesso>();

        }

        public GrupoAcesso ObterDetalhesGrupo(int grupoAcessoID)
        {
            IList<GrupoAcesso> listaRetorno;

            try
            {
                listaRetorno = new List<GrupoAcesso>();

                GrupoAcesso item = new GrupoAcesso();
                item.CodigoCurva = 1;
                item.CodigoGrupoAcesso = grupoAcessoID;
                item.CodigoTipoAcesso = 1;
                item.CodigoUsuarioResponsavel = 033868431;
                item.NomeGrupo = "Grupo Teste";

                List<Usuario> users = new List<Usuario>();

                Usuario user = new Usuario();
                user.Codigo = 1;
                user.Nome = "Luguima";
                user.CodigoSubMesa = 1;
                user.CodigoTipoUsuario = 2;
                users.Add(user);

                user = new Usuario();
                user.Codigo = 2;
                user.Nome = "fkodama";
                user.CodigoSubMesa = 1;
                user.CodigoTipoUsuario = 2;
                users.Add(user);

                user = new Usuario();
                user.Codigo = 3;
                user.Nome = "jvictorino";
                user.CodigoSubMesa = 1;
                user.CodigoTipoUsuario = 2;
                users.Add(user);

                user = new Usuario();
                user.Codigo = 4;
                user.Nome = "mayukum";
                user.CodigoSubMesa = 1;
                user.CodigoTipoUsuario = 2;
                users.Add(user);

                item.Usuarios = users;

                return item;

                //IControleAcessoDAO controleacessoDAO = DaoFactory.getControleAcessoDAO();

                //listaRetorno = controleacessoDAO.ObterGruposAcesso();

                //if (listaRetorno != null && listaRetorno.Count > 0)
                //{
                //    foreach (GrupoAcesso item in listaRetorno)
                //    {
                //        if (item.CodigoGrupoAcesso == grupoAcessoID)
                //        {
                //            return item;
                //        }
                //    }
                //}
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }

            finally
            {
                listaRetorno = null;
            }

            return null;
        }

        public IList<TipoAcesso> ObterTiposAcesso()
        {
            IList<TipoAcesso> listaTiposAcesso = null;

            try
            {
                listaTiposAcesso = new List<TipoAcesso>();

                TipoAcesso acesso = new TipoAcesso();
                acesso.Codigo = 1;
                acesso.Descricao = "Consulta";
                listaTiposAcesso.Add(acesso);

                acesso = new TipoAcesso();
                acesso.Codigo = 2;
                acesso.Descricao = "Gravação";
                listaTiposAcesso.Add(acesso);

                acesso = new TipoAcesso();
                acesso.Codigo = 3;
                acesso.Descricao = "Ativação de Curva";
                listaTiposAcesso.Add(acesso);

                //IControleAcessoDAO ControleAcessoDAO = DaoFactory.getControleAcessoDAO();

                //listaTiposAcesso = ControleAcessoDAO.ObterTiposAcesso();

                return listaTiposAcesso;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaTiposAcesso = null;
            }

            return listaTiposAcesso;
        }

        public IList<Usuario> ObterUsuarios(int grupoAcessoID)
        {
            IList<Usuario> ListaUsuarios = null;
            IControleAcessoDAO ControleAcessoDAO;

            try
            {
                ControleAcessoDAO = DaoFactory.getControleAcessoDAO();
                ListaUsuarios = ControleAcessoDAO.ObterUsuarios(grupoAcessoID);
                return ListaUsuarios;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                ListaUsuarios = null;
                ControleAcessoDAO = null;
            }

            return new List<Usuario>();
        }

        public void SalvarAcessoParametro(IDictionary parGrupoTipoAcesso)
        {
            //Declara o objeto
            IControleAcessoDAO controleAcessoDAO = null;

            try
            {
                //Instância o objeto DAO
                controleAcessoDAO = DaoFactory.getControleAcessoDAO();

                // Salva novo acesso.
                controleAcessoDAO.SalvarAcessoParametro(parGrupoTipoAcesso);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                // Desaloca o objeto
                controleAcessoDAO = null;
            }
        }

        #endregion
    }
}
